<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1717. 删除子字符串的最大得分</title>
</head>
<body>
  <script>
//     给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。

// 删除子字符串 "ab" 并得到 x 分。
// 比方说，从 "cabxbae" 删除 ab ，得到 "cxbae" 。
// 删除子字符串"ba" 并得到 y 分。
// 比方说，从 "cabxbae" 删除 ba ，得到 "cabxe" 。
// 请返回对 s 字符串执行上面操作若干次能得到的最大得分。

 

// 示例 1：

// 输入：s = "cdbcbbaaabab", x = 4, y = 5
// 输出：19
// 解释：
// - 删除 "cdbcbbaaabab" 中加粗的 "ba" ，得到 s = "cdbcbbaaab" ，加 5 分。
// - 删除 "cdbcbbaaab" 中加粗的 "ab" ，得到 s = "cdbcbbaa" ，加 4 分。
// - 删除 "cdbcbbaa" 中加粗的 "ba" ，得到 s = "cdbcba" ，加 5 分。
// - 删除 "cdbcba" 中加粗的 "ba" ，得到 s = "cdbc" ，加 5 分。
// 总得分为 5 + 4 + 5 + 5 = 19 。
// 示例 2：

// 输入：s = "aabbaaxybbaabb", x = 5, y = 4
// 输出：20
 

// 提示：

// 1 <= s.length <= 105
// 1 <= x, y <= 104
// s 只包含小写英文字母。

/**
 * @param {string} s
 * @param {number} x
 * @param {number} y
 * @return {number}
 */
var maximumGain = function(s, x, y) {
    let str,secStr,max,min;
    if (x > y) {
        str = "ab";
        secStr = "ba";
        max = x;
        min = y;
    } else {
        str = "ba";
        secStr = "ab";
        max = y;
        min = x;
    }
    let count = 0;
    while (s.includes(str) || s.includes(secStr)) {
        if (s.includes(str)) {
            s = s.replace(str, "");
            count += max;
            console.log(s, max);
            continue;
        }
        if (s.includes(secStr)) {
            s = s.replace(secStr, "");
            count += min;
            console.log(s, min);
            continue;
        }
    }
    return count;
};

var maximumGainAnswer = function (s, x, y) {
    if (x < y) {
        [x, y] = [y, x];
        s = s.replace(/./g, c => c === 'a' ? 'b' : c === 'b' ? 'a' : c);
    }

    let ans = 0, i = 0;
    while (i < s.length) {
        let cntA = 0, cntB = 0;
        while (i < s.length && (s[i] === 'a' || s[i] === 'b')) {
            if (s[i] === 'a') {
                cntA++;
            }
            else {
                if (cntA > 0) {
                    cntA--;
                    ans += x;
                } else {
                    cntB++;
                }
            }
            i++;
        }
        ans += Math.min(cntA, cntB) * y;
        i++;
    }
    return ans;
};

maximumGain("cdbcbbaaabab", 4, 5); // Example usage
  </script>
</body>
</html>